<?php
namespace Home\Model;

use Think\Model\RelationModel;

//在线支付模型层：专门用来处理用户支付之后的业务逻辑
class PayRecordModel extends RelationModel {
    private $pay_config; //支付宝配置

    protected function _initialize() {
        parent::_initialize();

        // print_r(C('ALIPAY'));die;
        $this->pay_config = C('ALIPAY');//加载支付宝的配置数据

        //相当于include,加载支付宝的四大核心文件，因为支付宝是第三方软件
        Vendor('Alipay.AlipayNotify');//支付宝处理回调类

        Vendor('Alipay.AlipaySubmit');//支付宝请求类

        Vendor('Alipay.CoreFunction');

        Vendor('Alipay.Md5Function');

    }

    /**
     * 建立支付请求，是根据用户传递参数，组装成支付宝请求业务参数数组，然后去调用建立请求的类来实现支付请求
     *
     * @return void
     * @author
     **/
    //支付方法名和参数都是从支付宝案例接口拷贝过来的
    //out_trade_no订单单号是由我们生成订单之后传进来的
    //subject订单名称、total_fee进度单金额也需要传进来
    //body 订单描述 觉得有必要就使用
    //$type 指的是支付的类型，如钱包充值等
    public function buildRequestForm($out_trade_no,$total_fee,$type,$pay_user,$subject,$body){
        $pay_config = $this->pay_config;

        //添加在线支付记录，需要自己添加的业务逻辑
        $data['order_sn'] = $out_trade_no;
        $data['amount'] = $total_fee;
        $data['type'] = $type;
        $data['pay_user'] = $pay_user;

        $this->add($data);


        //以下都是从支付宝案例接口拷贝过来的
        //构造支付宝请求业务参数数组
        $parameter = array(
            'service' => $pay_config['service'],
            'partner' => $pay_config['partner'],
            'payment_type' => $pay_config['payment_type'], //支付类型 //必填，不能修改
            'notify_url' => $pay_config['notify_url'], //服务器异步通知页面路径
            'return_url' => $pay_config['return_url'], //页面跳转同步通知页面路径
            'seller_id' => $pay_config['seller_id'], //卖家支付宝帐户必填
            'out_trade_no' => $out_trade_no, //商户订单号 通过支付页面的表单进行传递，注意要唯一！
            'subject' => $subject, //订单名称 //必填 通过支付页面的表单进行传递
            'total_fee' => $total_fee, //付款金额  //必填 通过支付页面的表单进行传递
            'body' => $body, //订单描述 通过支付页面的表单进行传递
            '_input_charset' => $pay_config['input_charset']
        );
        // print_r($parameter);die;

         // 建立请求
        $alipaySubmit = new \AlipaySubmit($pay_config);

        echo $alipaySubmit->buildRequestForm($parameter, 'GET', '请点击此跳转至支付宝付款页面');
    }



    /**
     * 支付宝通知验证
     *
     * @return void
     * @author
     **/
    public function payCheck($trade_status)
    {

        $alipayNotify = new \AlipayNotify($this->config); //计算得出通知验证结果

        //判断是异步还是同步回调做相应的验证，验证是否是支付宝发送的通知
        if(IS_POST){
            $verify_result = $alipayNotify->verifyNotify();

        }else{
            $verify_result = $alipayNotify->verifyReturn();

        }

        //验证成功
        if($verify_result && ($trade_status=='TRADE_FINISHED' or $trade_status=='TRADE_SUCCESS')){
            return true;
        }else{
            return false;
        }
    }

}
